#include "..\CookHeader.h"

// ü     κ
typedef struct _Node {
	int data;
	struct _Node* link = NULL;
} Node;

Array <Node*> memory;
Node* head, * current, * pre;

// Լ  κ
void printNodes(Node* start) {
	if (start == NULL)
		return;
	Node* current = start;
	print(current->data);
	while (current->link != NULL) {
		current = current->link;
		print(current->data);
	}
	println("");
}

void freeMemory() { // Ҵ   ޸𸮸 Ѵ.
	for (int i = 0; i < len(memory); i++)
		delete memory[i];
}

void makeLottoList(int num) {
	Node* node;
	node = new Node;
	node->data = num;
	memory.push_back(node);
	if (head == NULL) { // ù °  
		head = node;
		return;
	}
	if (head->data > num) {  //  ù ° 庸  
		node->link = head;
		head = node;
		return;
	}
	
	current = head;  // ߰  ϴ 
	while (current->link != NULL) {
		pre = current;
		current = current->link;
		if (current->data > num) {
			pre->link = node;
			node->link = current;
			return;
		}
	}
	
	current->link = node; // ϴ 尡  ū 
} 

bool findNumber(int num) {
	if (head == NULL)
		return false;
	current = head;
	if (current->data == num)
		return true;

	while (current->link != NULL) {
		current = current->link;
		if (current->data == num) {
			return true;
		}
	}
	return false;
}

//  ڵ κ
int main() {
	int lottoCount = 0;
	int lotto;

	randomInit(1, 45);
	while (true) {
		lotto = cookRandom(gen);
		if (findNumber(lotto))
			continue;
		lottoCount++;
		makeLottoList(lotto);
		if (lottoCount >= 6)
			break;
	}
	printNodes(head);
	freeMemory();
}